#ifndef Signal3_H
#define Signal3_H
#include "Global_Signal.h"
#include "abstractSignal.h"

template <class T, class U, class V, class W>
class Signal3 : public AbstractSignal
{
        public :

        /*************************************************************/
        /*					Propriétés	     */
        /*************************************************************/

        T * objetSignal;        /*!< Pointeur vers l'objet de base	*/

        U arg1;
        V arg2;
        W arg3;

        /*************************************************************/
        /*					Constructeur         */
        /*************************************************************/

        Signal3(int (T::*apSignal)(U, V, W),T * ref, U arg, V aArg2, W aArg3);

        /*************************************************************/
        /*					Méthodes	  */
        /*************************************************************/

        void Update();


};

template <class T, class U, class V, class W>
Signal3<T,U,V,W>::Signal3(int (T::*apSignal)(U, V, W),T * ref, U arg, V aArg2, W aArg3) :
    objetSignal(ref), pSignal(apSignal),arg1(arg), arg2(aArg2), arg3(aArg3)
{}

template <class T, class U, class V, class W>
void Signal3<T,U,V,W>::Update()
{
        if((objetSignal->*pSignal)(arg1, arg2, arg3))
        {
                Run();
        }
}

#endif // Signal3_H
